package com.webemail.email.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.webemail.email.entity.MyFolder;
import com.webemail.sys.model.SysEmailAccount;

import javax.mail.Folder;
import javax.mail.MessagingException;
import javax.mail.Store;
import java.util.List;

/**
 * @author LaiHQ
 */
public interface MyFolderService extends IService<MyFolder> {

    /**
     * 查询我的所有文件夹
     * @return
     * @throws MessagingException
     */
    List<MyFolder> syncFolder() throws MessagingException;

    /**
     * 查询我的全部文件夹
     * @return
     */
    List<MyFolder> getMyFolder();

    /**
     * 检查服务器和系统目录是否一致
     * @return
     */
    void checkSync(SysEmailAccount account);

    /**
     * 获取服务器端邮箱目录
     * @return
     */
    List<Folder> getServiceFolderList(SysEmailAccount account,String pattern);

    /**
     * 获取store
     * @param account
     * @return
     */
    Store getStore(SysEmailAccount account);

    /**
     * 根据文件夹id删除邮件
     * @return
     */
    int deleteEmailByFolderId();

    /**
     * 创建文件夹, 需要在服务器上创建对应的文件夹
     * @param folderId
     * @param newName
     * @return
     */
    boolean addFolder(Long folderId,String newName);

    /**
     * 获取当前登录邮箱账户
     * @return
     */
    SysEmailAccount getCurrAccount();

    /**
     * 更新文件夹名字,这里只能改本系统的名字,因为邮件系统的名称更改不会同步到系统,
     * 用户若手动修改了目录名字, 需要自己手动同步
     * @param name
     * @return
     */
    boolean editFolderName(String name);

    /**
     * 移动邮件, 需要过滤标题和内容,现有过滤只过滤标题,如果标题无匹配结果,增加对内容的过滤
     * 把邮件分为有案号或者没有案号的部分,匹配后需要移动到对应的文件夹
     * @param emailId
     * @param targetFolderId
     * @return
     */
    boolean moveEmail(Long emailId,Long targetFolderId);

    /**
     * 上传邮件
     * @param emailId
     * @return
     */
    boolean uploadEmail(Long emailId);
}
